Micron Document
NexusPi Git Node


Displaying Raw • Download

rnodelogs.py HEAD (592c826d) Text, 10.85 KB

T8b949e#!/usr/bin/env python3

T8b949e# Reticulum License
T8b949e#
T8b949e# Copyright (c) 2016-2025 Mark Qvist
T8b949e#
T8b949e# Permission is hereby granted, free of charge, to any person obtaining a copy
T8b949e# of this software and associated documentation files (the "Software"), to deal
T8b949e# in the Software without restriction, including without limitation the rights
T8b949e# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
T8b949e# copies of the Software, and to permit persons to whom the Software is
T8b949e# furnished to do so, subject to the following conditions:
T8b949e#
T8b949e# - The Software shall not be used in any kind of system which includes amongst
T8b949e# its functions the ability to purposefully do harm to human beings.
T8b949e#
T8b949e# - The Software shall not be used, directly or indirectly, in the creation of
T8b949e# an artificial intelligence, machine learning or language model training
T8b949e# dataset, including but not limited to any use that contributes to the
T8b949e# training or development of such a model or algorithm.
T8b949e#
T8b949e# - The above copyright notice and this permission notice shall be included in
T8b949e# all copies or substantial portions of the Software.
T8b949e#
T8b949e# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
T8b949e# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
T8b949e# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
T8b949e# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
T8b949e# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
T8b949e# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
T8b949e# SOFTWARE.

Tff7b72import T7ee787argparse
Tff7b72import T7ee787socket
Tff7b72import T7ee787sys
Tff7b72import T7ee787threading
Tff7b72import T7ee787time
Tff7b72from T7ee787time Tff7b72import Te6edf3sleep

Tff7b72from T7ee787RNST7ee787.T7ee787_version Tff7b72import Te6edf3__version__

Te6edf3RNODE_BAUDRATE Tff7b72= T79c0ff115200
Te6edf3DEFAULT_TCP_PORT Tff7b72= T79c0ff7633
Te6edf3RECONNECT_WAIT Tff7b72= T79c0ff5


Tff7b72class T56d364KISSTb4b4b4:
Te6edf3FEND Tff7b72= T79c0ff0xC0
Te6edf3FESC Tff7b72= T79c0ff0xDB
Te6edf3TFEND Tff7b72= T79c0ff0xDC
Te6edf3TFESC Tff7b72= T79c0ff0xDD

Te6edf3CMD_UNKNOWN Tff7b72= T79c0ff0xFE
Te6edf3CMD_LOG Tff7b72= T79c0ff0x80

Tf0883e@staticmethod
Tff7b72def Td2a8ffescapeTb4b4b4(Te6edf3dataTb4b4b4)Tb4b4b4:
Te6edf3data Tff7b72= Te6edf3dataTff7b72.Td2a8ffreplaceTb4b4b4(Tffa657bytesTb4b4b4(Tb4b4b4[Te6edf3KISSTff7b72.Td2a8ffFESCTb4b4b4]Tb4b4b4)Tb4b4b4, Tffa657bytesTb4b4b4(Tb4b4b4[Te6edf3KISSTff7b72.Td2a8ffFESCTb4b4b4, Te6edf3KISSTff7b72.Td2a8ffTFESCTb4b4b4]Tb4b4b4)Tb4b4b4)
Te6edf3data Tff7b72= Te6edf3dataTff7b72.Td2a8ffreplaceTb4b4b4(Tffa657bytesTb4b4b4(Tb4b4b4[Te6edf3KISSTff7b72.Td2a8ffFENDTb4b4b4]Tb4b4b4)Tb4b4b4, Tffa657bytesTb4b4b4(Tb4b4b4[Te6edf3KISSTff7b72.Td2a8ffFESCTb4b4b4, Te6edf3KISSTff7b72.Td2a8ffTFENDTb4b4b4]Tb4b4b4)Tb4b4b4)
Tff7b72return Te6edf3data


Tff7b72class T56d364TransportTb4b4b4:
Tff7b72def Td2a8ffreadTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3nTff7b72=T79c0ff1Tb4b4b4)Tb4b4b4:
Tff7b72raise Tf85149NotImplementedError

Tff7b72def Td2a8ffwriteTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3dataTb4b4b4)Tb4b4b4:
Tff7b72raise Tf85149NotImplementedError

Tff7b72def Td2a8ffcloseTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72raise Tf85149NotImplementedError

Tf0883e@property
Tff7b72def Td2a8ffis_openTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72raise Tf85149NotImplementedError


Tff7b72class T56d364SerialTransportTb4b4b4(Te6edf3TransportTb4b4b4)Tb4b4b4:
Tff7b72def Tff7b72__init__Tb4b4b4(Tff7b72selfTb4b4b4, Te6edf3device_pathTb4b4b4)Tb4b4b4:
Tff7b72import T7ee787serial
Tff7b72selfTff7b72.Td2a8ffserial Tff7b72= Te6edf3serialTff7b72.Td2a8ffSerialTb4b4b4(
Te6edf3port Tff7b72= Te6edf3device_pathTb4b4b4,
Te6edf3baudrate Tff7b72= Te6edf3RNODE_BAUDRATETb4b4b4,
Te6edf3bytesize Tff7b72= T79c0ff8Tb4b4b4,
Te6edf3parity Tff7b72= Te6edf3serialTff7b72.Td2a8ffPARITY_NONETb4b4b4,
Te6edf3stopbits Tff7b72= T79c0ff1Tb4b4b4,
Te6edf3xonxoff Tff7b72= Tff7b72FalseTb4b4b4,
Te6edf3rtscts Tff7b72= Tff7b72FalseTb4b4b4,
Te6edf3timeout Tff7b72= T79c0ff0Tb4b4b4,
Te6edf3inter_byte_timeout Tff7b72= Tff7b72NoneTb4b4b4,
Te6edf3write_timeout Tff7b72= Tff7b72NoneTb4b4b4,
Te6edf3dsrdtr Tff7b72= Tff7b72FalseTb4b4b4,
Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ff_open Tff7b72= Tff7b72True

Tff7b72def Td2a8ffreadTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3nTff7b72=T79c0ff1Tb4b4b4)Tb4b4b4:
Tff7b72tryTb4b4b4:
Te6edf3waiting Tff7b72= Tff7b72selfTff7b72.Td2a8ffserialTff7b72.Td2a8ffin_waiting
Tff7b72except Tf85149ExceptionTb4b4b4:
Tff7b72selfTff7b72.Td2a8ff_open Tff7b72= Tff7b72False
Tff7b72return Ta5d6ffbTa5d6ff"Ta5d6ff"
Tff7b72if Tff7b72not Te6edf3waitingTb4b4b4:
Te6edf3sleepTb4b4b4(T79c0ff0.08Tb4b4b4)
Tff7b72return Ta5d6ffbTa5d6ff"Ta5d6ff"
Tff7b72tryTb4b4b4:
Tff7b72return Tff7b72selfTff7b72.Td2a8ffserialTff7b72.Td2a8ffreadTb4b4b4(Tffa657minTb4b4b4(Te6edf3nTb4b4b4, Te6edf3waitingTb4b4b4)Tb4b4b4)
Tff7b72except Tf85149ExceptionTb4b4b4:
Tff7b72selfTff7b72.Td2a8ff_open Tff7b72= Tff7b72False
Tff7b72return Ta5d6ffbTa5d6ff"Ta5d6ff"

Tff7b72def Td2a8ffwriteTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3dataTb4b4b4)Tb4b4b4:
Tff7b72return Tff7b72selfTff7b72.Td2a8ffserialTff7b72.Td2a8ffwriteTb4b4b4(Te6edf3dataTb4b4b4)

Tff7b72def Td2a8ffcloseTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ff_open Tff7b72= Tff7b72False
Tff7b72tryTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffserialTff7b72.Td2a8ffcloseTb4b4b4(Tb4b4b4)
Tff7b72except Tf85149ExceptionTb4b4b4:
Tff7b72pass

Tf0883e@property
Tff7b72def Td2a8ffis_openTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72tryTb4b4b4:
Tff7b72return Tff7b72selfTff7b72.Td2a8ff_open Tff7b72and Tff7b72selfTff7b72.Td2a8ffserialTff7b72.Td2a8ffis_open
Tff7b72except Tf85149ExceptionTb4b4b4:
Tff7b72return Tff7b72False


Tff7b72class T56d364TcpTransportTb4b4b4(Te6edf3TransportTb4b4b4)Tb4b4b4:
Tff7b72def Tff7b72__init__Tb4b4b4(Tff7b72selfTb4b4b4, Te6edf3hostTb4b4b4, Te6edf3portTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffsock Tff7b72= Te6edf3socketTff7b72.Td2a8ffcreate_connectionTb4b4b4(Tb4b4b4(Te6edf3hostTb4b4b4, Te6edf3portTb4b4b4)Tb4b4b4, Te6edf3timeoutTff7b72=T79c0ff5Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffsockTff7b72.Td2a8ffsettimeoutTb4b4b4(T79c0ff0.1Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ff_open Tff7b72= Tff7b72True

Tff7b72def Td2a8ffreadTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3nTff7b72=T79c0ff1Tb4b4b4)Tb4b4b4:
Tff7b72tryTb4b4b4:
Te6edf3data Tff7b72= Tff7b72selfTff7b72.Td2a8ffsockTff7b72.Td2a8ffrecvTb4b4b4(Te6edf3nTb4b4b4)
Tff7b72except Te6edf3socketTff7b72.Td2a8fftimeoutTb4b4b4:
Tff7b72return Ta5d6ffbTa5d6ff"Ta5d6ff"
Tff7b72except Tf85149OSErrorTb4b4b4:
Tff7b72selfTff7b72.Td2a8ff_open Tff7b72= Tff7b72False
Tff7b72return Ta5d6ffbTa5d6ff"Ta5d6ff"
Tff7b72if Te6edf3data Tff7b72== Ta5d6ffbTa5d6ff"Ta5d6ff"Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ff_open Tff7b72= Tff7b72False
Tff7b72return Te6edf3data

Tff7b72def Td2a8ffwriteTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3dataTb4b4b4)Tb4b4b4:
Tff7b72return Tff7b72selfTff7b72.Td2a8ffsockTff7b72.Td2a8ffsendallTb4b4b4(Te6edf3dataTb4b4b4)

Tff7b72def Td2a8ffcloseTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ff_open Tff7b72= Tff7b72False
Tff7b72tryTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffsockTff7b72.Td2a8ffcloseTb4b4b4(Tb4b4b4)
Tff7b72except Tf85149ExceptionTb4b4b4:
Tff7b72pass

Tf0883e@property
Tff7b72def Td2a8ffis_openTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72return Tff7b72selfTff7b72.Td2a8ff_open


Tff7b72class T56d364RNodeLogReaderTb4b4b4:
Tff7b72def Tff7b72__init__Tb4b4b4(Tff7b72selfTb4b4b4, Te6edf3transportTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8fftransport Tff7b72= Te6edf3transport
Tff7b72selfTff7b72.Td2a8ff_stop Tff7b72= Tff7b72False

Tff7b72def Td2a8ffstopTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ff_stop Tff7b72= Tff7b72True

Tff7b72def Td2a8ffsend_frameTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3commandTb4b4b4, Te6edf3dataTff7b72=Ta5d6ffbTa5d6ff"Ta5d6ff"Tb4b4b4)Tb4b4b4:
Te6edf3frame Tff7b72= Tffa657bytesTb4b4b4(Tb4b4b4[Te6edf3KISSTff7b72.Td2a8ffFENDTb4b4b4, Te6edf3commandTb4b4b4]Tb4b4b4) Tff7b72+ Te6edf3KISSTff7b72.Td2a8ffescapeTb4b4b4(Te6edf3dataTb4b4b4) Tff7b72+ Tffa657bytesTb4b4b4(Tb4b4b4[Te6edf3KISSTff7b72.Td2a8ffFENDTb4b4b4]Tb4b4b4)
Tff7b72selfTff7b72.Td2a8fftransportTff7b72.Td2a8ffwriteTb4b4b4(Te6edf3frameTb4b4b4)

Tff7b72def Td2a8ffread_loopTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Te6edf3in_frame Tff7b72= Tff7b72False
Te6edf3escape Tff7b72= Tff7b72False
Te6edf3command Tff7b72= Te6edf3KISSTff7b72.Td2a8ffCMD_UNKNOWN
Te6edf3buf Tff7b72= Tffa657bytearrayTb4b4b4(Tb4b4b4)

Tff7b72while Tff7b72not Tff7b72selfTff7b72.Td2a8ff_stop Tff7b72and Tff7b72selfTff7b72.Td2a8fftransportTff7b72.Td2a8ffis_openTb4b4b4:
Te6edf3chunk Tff7b72= Tff7b72selfTff7b72.Td2a8fftransportTff7b72.Td2a8ffreadTb4b4b4(T79c0ff256Tb4b4b4)
Tff7b72if Tff7b72not Te6edf3chunkTb4b4b4:
Tff7b72continue

Tff7b72for Te6edf3byte Tff7b72in Te6edf3chunkTb4b4b4:
Tff7b72if Te6edf3byte Tff7b72== Te6edf3KISSTff7b72.Td2a8ffFENDTb4b4b4:
Tff7b72if Te6edf3in_frame Tff7b72and Te6edf3command Tff7b72!= Te6edf3KISSTff7b72.Td2a8ffCMD_UNKNOWNTb4b4b4:
Tff7b72selfTff7b72.Td2a8ff_dispatchTb4b4b4(Te6edf3commandTb4b4b4, Tffa657bytesTb4b4b4(Te6edf3bufTb4b4b4)Tb4b4b4)
Te6edf3in_frame Tff7b72= Tff7b72True
Te6edf3command Tff7b72= Te6edf3KISSTff7b72.Td2a8ffCMD_UNKNOWN
Te6edf3escape Tff7b72= Tff7b72False
Te6edf3buf Tff7b72= Tffa657bytearrayTb4b4b4(Tb4b4b4)
Tff7b72elif Te6edf3in_frameTb4b4b4:
Tff7b72if Te6edf3byte Tff7b72== Te6edf3KISSTff7b72.Td2a8ffFESCTb4b4b4:
Te6edf3escape Tff7b72= Tff7b72True
Tff7b72continue
Tff7b72if Te6edf3escapeTb4b4b4:
Tff7b72if Te6edf3byte Tff7b72== Te6edf3KISSTff7b72.Td2a8ffTFENDTb4b4b4:
Te6edf3byte Tff7b72= Te6edf3KISSTff7b72.Td2a8ffFEND
Tff7b72elif Te6edf3byte Tff7b72== Te6edf3KISSTff7b72.Td2a8ffTFESCTb4b4b4:
Te6edf3byte Tff7b72= Te6edf3KISSTff7b72.Td2a8ffFESC
Te6edf3escape Tff7b72= Tff7b72False
Tff7b72if Te6edf3command Tff7b72== Te6edf3KISSTff7b72.Td2a8ffCMD_UNKNOWNTb4b4b4:
Te6edf3command Tff7b72= Te6edf3byte
Tff7b72elseTb4b4b4:
Te6edf3bufTff7b72.Td2a8ffappendTb4b4b4(Te6edf3byteTb4b4b4)

Tff7b72def Td2a8ff_dispatchTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3commandTb4b4b4, Te6edf3payloadTb4b4b4)Tb4b4b4:
Tff7b72if Te6edf3command Tff7b72== Te6edf3KISSTff7b72.Td2a8ffCMD_LOGTb4b4b4:
Te6edf3text Tff7b72= Te6edf3payloadTff7b72.Td2a8ffdecodeTb4b4b4(Ta5d6ff"Ta5d6ffutf-8Ta5d6ff"Tb4b4b4, Te6edf3errorsTff7b72=Ta5d6ff"Ta5d6ffreplaceTa5d6ff"Tb4b4b4)
Tff7b72if Tff7b72not Te6edf3textTff7b72.Td2a8ffendswithTb4b4b4(Ta5d6ff"Tffea00\nTa5d6ff"Tb4b4b4)Tb4b4b4:
Te6edf3text Tff7b72+Tff7b72= Ta5d6ff"Tffea00\nTa5d6ff"
Te6edf3sysTff7b72.Td2a8ffstdoutTff7b72.Td2a8ffwriteTb4b4b4(Te6edf3textTb4b4b4)
Te6edf3sysTff7b72.Td2a8ffstdoutTff7b72.Td2a8ffflushTb4b4b4(Tb4b4b4)


Tff7b72def Td2a8ffopen_transportTb4b4b4(Te6edf3argsTb4b4b4, Te6edf3device_pathTb4b4b4)Tb4b4b4:
Tff7b72if Te6edf3argsTff7b72.Td2a8ffhostTb4b4b4:
Tff7b72return Te6edf3TcpTransportTb4b4b4(Te6edf3argsTff7b72.Td2a8ffhostTb4b4b4, Te6edf3argsTff7b72.Td2a8fftcp_portTb4b4b4)Tb4b4b4, Te6edf3argsTff7b72.Td2a8ffhost Tff7b72+ Ta5d6ff"Ta5d6ff:Ta5d6ff" Tff7b72+ Tffa657strTb4b4b4(Te6edf3argsTff7b72.Td2a8fftcp_portTb4b4b4)
Tff7b72return Te6edf3SerialTransportTb4b4b4(Te6edf3device_pathTb4b4b4)Tb4b4b4, Te6edf3device_path


Tff7b72def Td2a8ffstatusTb4b4b4(Te6edf3messageTb4b4b4)Tb4b4b4:
Te6edf3sysTff7b72.Td2a8ffstdoutTff7b72.Td2a8ffwriteTb4b4b4(Te6edf3message Tff7b72+ Ta5d6ff"Tffea00\nTa5d6ff"Tb4b4b4)
Te6edf3sysTff7b72.Td2a8ffstdoutTff7b72.Td2a8ffflushTb4b4b4(Tb4b4b4)


Tff7b72def Td2a8ffselect_serial_port_interactivelyTb4b4b4(Tb4b4b4)Tb4b4b4:
Tff7b72from T7ee787serialT7ee787.T7ee787tools Tff7b72import Te6edf3list_ports
Te6edf3ports Tff7b72= Te6edf3list_portsTff7b72.Td2a8ffcomportsTb4b4b4(Tb4b4b4)
Tff7b72if Tff7b72not Te6edf3portsTb4b4b4:
Tffa657printTb4b4b4(Ta5d6ff"Ta5d6ffNo serial ports detected.Ta5d6ff"Tb4b4b4)
Te6edf3sysTff7b72.Td2a8ffexitTb4b4b4(T79c0ff1Tb4b4b4)

Te6edf3portlist Tff7b72= Tb4b4b4[Tb4b4b4]
Tff7b72for Te6edf3port Tff7b72in Te6edf3portsTb4b4b4:
Te6edf3portlistTff7b72.Td2a8ffinsertTb4b4b4(T79c0ff0Tb4b4b4, Te6edf3portTb4b4b4)

Tffa657printTb4b4b4(Ta5d6ff"Ta5d6ffDetected serial ports:Ta5d6ff"Tb4b4b4)
Tff7b72for Te6edf3iTb4b4b4, Te6edf3port Tff7b72in Tffa657enumerateTb4b4b4(Te6edf3portlistTb4b4b4, Te6edf3startTff7b72=T79c0ff1Tb4b4b4)Tb4b4b4:
Tffa657printTb4b4b4(Ta5d6ff"Ta5d6ff [Ta5d6ff" Tff7b72+ Tffa657strTb4b4b4(Te6edf3iTb4b4b4) Tff7b72+ Ta5d6ff"Ta5d6ff] Ta5d6ff" Tff7b72+ Tffa657strTb4b4b4(Te6edf3portTff7b72.Td2a8ffdeviceTb4b4b4) Tff7b72+ Ta5d6ff"Ta5d6ff (Ta5d6ff" Tff7b72+ Tffa657strTb4b4b4(Te6edf3portTff7b72.Td2a8ffproductTb4b4b4) Tff7b72+ Ta5d6ff"Ta5d6ff, Ta5d6ff" Tff7b72+ Tffa657strTb4b4b4(Te6edf3portTff7b72.Td2a8ffserial_numberTb4b4b4) Tff7b72+ Ta5d6ff"Ta5d6ff)Ta5d6ff"Tb4b4b4)

Tffa657printTb4b4b4(Ta5d6ff"Tffea00\nTa5d6ffEnter the number of the serial port your device is connected to:Tffea00\nTa5d6ff? Ta5d6ff"Tb4b4b4, Te6edf3endTff7b72=Ta5d6ff"Ta5d6ff"Tb4b4b4)
Tff7b72tryTb4b4b4:
Te6edf3c_port Tff7b72= Tffa657intTb4b4b4(Tffa657inputTb4b4b4(Tb4b4b4)Tb4b4b4)
Tff7b72if Te6edf3c_port Tff7b72< T79c0ff1 Tff7b72or Te6edf3c_port Tff7b72> Tffa657lenTb4b4b4(Te6edf3portlistTb4b4b4)Tb4b4b4:
Tff7b72raise Tf85149ValueErrorTb4b4b4(Tb4b4b4)
Te6edf3selected_port Tff7b72= Te6edf3portlistTb4b4b4[Te6edf3c_port Tff7b72- T79c0ff1Tb4b4b4]
Tff7b72except Tf85149ExceptionTb4b4b4:
Tffa657printTb4b4b4(Ta5d6ff"Ta5d6ffThat port does not exist, exiting now.Ta5d6ff"Tb4b4b4)
Te6edf3sysTff7b72.Td2a8ffexitTb4b4b4(T79c0ff1Tb4b4b4)

Tffa657printTb4b4b4(Ta5d6ff"Tffea00\nTa5d6ffUsing device on Ta5d6ff" Tff7b72+ Tffa657strTb4b4b4(Te6edf3selected_portTff7b72.Td2a8ffdeviceTb4b4b4)Tb4b4b4)
Tff7b72return Te6edf3selected_portTff7b72.Td2a8ffdevice


Tff7b72def Td2a8ffmainTb4b4b4(Tb4b4b4)Tb4b4b4:
Te6edf3parser Tff7b72= Te6edf3argparseTff7b72.Td2a8ffArgumentParserTb4b4b4(Te6edf3descriptionTff7b72=Ta5d6ff"Ta5d6ffRNode log streaming utility. Connects to an RNode over serial or TCP and prints CMD_LOG frames to stdout.Ta5d6ff"Tb4b4b4)
Te6edf3parserTff7b72.Td2a8ffadd_argumentTb4b4b4(Ta5d6ff"Ta5d6ffportTa5d6ff"Tb4b4b4, Te6edf3nargsTff7b72=Ta5d6ff"Ta5d6ff?Ta5d6ff"Tb4b4b4, Te6edf3defaultTff7b72=Tff7b72NoneTb4b4b4, Te6edf3helpTff7b72=Ta5d6ff"Ta5d6ffserial port where RNode is attachedTa5d6ff"Tb4b4b4)
Te6edf3parserTff7b72.Td2a8ffadd_argumentTb4b4b4(Ta5d6ff"Ta5d6ff-HTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ff--hostTa5d6ff"Tb4b4b4, Te6edf3actionTff7b72=Ta5d6ff"Ta5d6ffstoreTa5d6ff"Tb4b4b4, Te6edf3defaultTff7b72=Tff7b72NoneTb4b4b4, Te6edf3metavarTff7b72=Ta5d6ff"Ta5d6ffhostTa5d6ff"Tb4b4b4, Te6edf3helpTff7b72=Ta5d6ff"Ta5d6ffhostname or IP of a TCP-connected RNodeTa5d6ff"Tb4b4b4)
Te6edf3parserTff7b72.Td2a8ffadd_argumentTb4b4b4(Ta5d6ff"Ta5d6ff-pTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ff--portTa5d6ff"Tb4b4b4, Te6edf3destTff7b72=Ta5d6ff"Ta5d6fftcp_portTa5d6ff"Tb4b4b4, Te6edf3actionTff7b72=Ta5d6ff"Ta5d6ffstoreTa5d6ff"Tb4b4b4, Tffa657typeTff7b72=Tffa657intTb4b4b4, Te6edf3defaultTff7b72=Te6edf3DEFAULT_TCP_PORTTb4b4b4, Te6edf3metavarTff7b72=Ta5d6ff"Ta5d6ffportTa5d6ff"Tb4b4b4, Te6edf3helpTff7b72=Ta5d6ff"Ta5d6ffTCP port (default: Ta5d6ff" Tff7b72+ Tffa657strTb4b4b4(Te6edf3DEFAULT_TCP_PORTTb4b4b4) Tff7b72+ Ta5d6ff"Ta5d6ff)Ta5d6ff"Tb4b4b4)
Te6edf3parserTff7b72.Td2a8ffadd_argumentTb4b4b4(Ta5d6ff"Ta5d6ff-rTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ff--reconnectTa5d6ff"Tb4b4b4, Te6edf3actionTff7b72=Ta5d6ff"Ta5d6ffstore_trueTa5d6ff"Tb4b4b4, Te6edf3helpTff7b72=Ta5d6ff"Ta5d6ffautomatically reconnect if the connection dropsTa5d6ff"Tb4b4b4)
Te6edf3parserTff7b72.Td2a8ffadd_argumentTb4b4b4(Ta5d6ff"Ta5d6ff-vTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ff--versionTa5d6ff"Tb4b4b4, Te6edf3actionTff7b72=Ta5d6ff"Ta5d6ffversionTa5d6ff"Tb4b4b4, Te6edf3versionTff7b72=Ta5d6ff"Ta5d6ffrnodelogs Tffd700{version}Ta5d6ff"Tff7b72.Td2a8ffformatTb4b4b4(Te6edf3versionTff7b72=Te6edf3__version__Tb4b4b4)Tb4b4b4)
Te6edf3args Tff7b72= Te6edf3parserTff7b72.Td2a8ffparse_argsTb4b4b4(Tb4b4b4)

Tff7b72if Te6edf3argsTff7b72.Td2a8ffport Tff7b72and Te6edf3argsTff7b72.Td2a8ffhostTb4b4b4:
Tffa657printTb4b4b4(Ta5d6ff"Ta5d6ffError: specify either a serial port or a --host, not both.Ta5d6ff"Tb4b4b4)
Te6edf3sysTff7b72.Td2a8ffexitTb4b4b4(T79c0ff2Tb4b4b4)

Te6edf3device_path Tff7b72= Tff7b72None
Tff7b72if Tff7b72not Te6edf3argsTff7b72.Td2a8ffhostTb4b4b4:
Te6edf3device_path Tff7b72= Te6edf3argsTff7b72.Td2a8ffport
Tff7b72if Te6edf3device_path Tff7b72is Tff7b72NoneTb4b4b4:
Tff7b72tryTb4b4b4:
Tff7b72from T7ee787serialT7ee787.T7ee787tools Tff7b72import Te6edf3list_ports T8b949e# noqa: F401
Tff7b72except Tf85149ImportErrorTb4b4b4:
Tffa657printTb4b4b4(Ta5d6ff"Ta5d6ffrnodelogs needs pyserial to work.Ta5d6ff"Tb4b4b4)
Tffa657printTb4b4b4(Ta5d6ff"Ta5d6ffYou can install it with: pip3 install pyserialTa5d6ff"Tb4b4b4)
Te6edf3sysTff7b72.Td2a8ffexitTb4b4b4(T79c0ff1Tb4b4b4)
Te6edf3device_path Tff7b72= Te6edf3select_serial_port_interactivelyTb4b4b4(Tb4b4b4)

Tff7b72if Te6edf3argsTff7b72.Td2a8ffhostTb4b4b4:
Tffa657printTb4b4b4(Ta5d6ff"Ta5d6ffConnecting to Ta5d6ff" Tff7b72+ Te6edf3argsTff7b72.Td2a8ffhost Tff7b72+ Ta5d6ff"Ta5d6ff:Ta5d6ff" Tff7b72+ Tffa657strTb4b4b4(Te6edf3argsTff7b72.Td2a8fftcp_portTb4b4b4) Tff7b72+ Ta5d6ff"Ta5d6ff ...Ta5d6ff"Tb4b4b4)

Te6edf3transport Tff7b72= Tff7b72None
Te6edf3target Tff7b72= Tff7b72None
Te6edf3reader Tff7b72= Tff7b72None
Te6edf3first_connect Tff7b72= Tff7b72True
Tff7b72tryTb4b4b4:
Tff7b72while Tff7b72TrueTb4b4b4:
Tff7b72while Tff7b72TrueTb4b4b4:
Tff7b72tryTb4b4b4:
Te6edf3transportTb4b4b4, Te6edf3target Tff7b72= Te6edf3open_transportTb4b4b4(Te6edf3argsTb4b4b4, Te6edf3device_pathTb4b4b4)
Tff7b72break
Tff7b72except Tf85149ImportErrorTb4b4b4:
Tffa657printTb4b4b4(Ta5d6ff"Ta5d6ffrnodelogs needs pyserial to work.Ta5d6ff"Tb4b4b4)
Tffa657printTb4b4b4(Ta5d6ff"Ta5d6ffYou can install it with: pip3 install pyserialTa5d6ff"Tb4b4b4)
Te6edf3sysTff7b72.Td2a8ffexitTb4b4b4(T79c0ff1Tb4b4b4)
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Tff7b72if Tff7b72not Te6edf3argsTff7b72.Td2a8ffreconnectTb4b4b4:
Tff7b72if Tffa657isinstanceTb4b4b4(Te6edf3eTb4b4b4, Tf85149OSErrorTb4b4b4)Tb4b4b4:
Tffa657printTb4b4b4(Ta5d6ff"Ta5d6ffCould not connect: Ta5d6ff" Tff7b72+ Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4)
Tff7b72elseTb4b4b4:
Tffa657printTb4b4b4(Ta5d6ff"Ta5d6ffCould not open Ta5d6ff" Tff7b72+ Tffa657strTb4b4b4(Te6edf3device_pathTb4b4b4) Tff7b72+ Ta5d6ff"Ta5d6ff: Ta5d6ff" Tff7b72+ Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4)
Te6edf3sysTff7b72.Td2a8ffexitTb4b4b4(T79c0ff1Tb4b4b4)
Te6edf3sleepTb4b4b4(Te6edf3RECONNECT_WAITTb4b4b4)

Tff7b72if Te6edf3first_connectTb4b4b4:
Te6edf3statusTb4b4b4(Ta5d6ff"Ta5d6ffConnected to Ta5d6ff" Tff7b72+ Te6edf3targetTb4b4b4)
Te6edf3first_connect Tff7b72= Tff7b72False
Tff7b72elseTb4b4b4:
Te6edf3statusTb4b4b4(Ta5d6ff"Ta5d6ffReconnected to Ta5d6ff" Tff7b72+ Te6edf3targetTb4b4b4)

Te6edf3reader Tff7b72= Te6edf3RNodeLogReaderTb4b4b4(Te6edf3transportTb4b4b4)
Te6edf3thread Tff7b72= Te6edf3threadingTff7b72.Td2a8ffThreadTb4b4b4(Te6edf3targetTff7b72=Te6edf3readerTff7b72.Td2a8ffread_loopTb4b4b4, Te6edf3daemonTff7b72=Tff7b72TrueTb4b4b4)
Te6edf3threadTff7b72.Td2a8ffstartTb4b4b4(Tb4b4b4)

Tff7b72while Te6edf3threadTff7b72.Td2a8ffis_aliveTb4b4b4(Tb4b4b4)Tb4b4b4:
Te6edf3threadTff7b72.Td2a8ffjoinTb4b4b4(Te6edf3timeoutTff7b72=T79c0ff0.5Tb4b4b4)

Tff7b72if Te6edf3readerTff7b72.Td2a8ff_stopTb4b4b4:
Tff7b72break

Te6edf3statusTb4b4b4(Ta5d6ff"Ta5d6ffConnection to Ta5d6ff" Tff7b72+ Te6edf3target Tff7b72+ Ta5d6ff"Ta5d6ff droppedTa5d6ff"Tb4b4b4)
Tff7b72tryTb4b4b4:
Te6edf3transportTff7b72.Td2a8ffcloseTb4b4b4(Tb4b4b4)
Tff7b72except Tf85149ExceptionTb4b4b4:
Tff7b72pass

Tff7b72if Tff7b72not Te6edf3argsTff7b72.Td2a8ffreconnectTb4b4b4:
Tff7b72break

Te6edf3sleepTb4b4b4(Te6edf3RECONNECT_WAITTb4b4b4)

Tff7b72except Tf85149KeyboardInterruptTb4b4b4:
Tffa657printTb4b4b4(Ta5d6ff"Ta5d6ff"Tb4b4b4)
Tff7b72tryTb4b4b4:
Tff7b72if Te6edf3reader Tff7b72is Tff7b72not Tff7b72NoneTb4b4b4:
Te6edf3readerTff7b72.Td2a8ffstopTb4b4b4(Tb4b4b4)
Tff7b72if Te6edf3transport Tff7b72is Tff7b72not Tff7b72NoneTb4b4b4:
Te6edf3transportTff7b72.Td2a8ffcloseTb4b4b4(Tb4b4b4)
Tff7b72except Tf85149ExceptionTb4b4b4:
Tff7b72pass
Te6edf3sysTff7b72.Td2a8ffexitTb4b4b4(T79c0ff0Tb4b4b4)


Tff7b72if Tff7b72__name__ Tff7b72== Ta5d6ff"Ta5d6ff__main__Ta5d6ff"Tb4b4b4:
Te6edf3mainTb4b4b4(Tb4b4b4)

Served by rngit 1.5.2 - Generated in 0.04s